7z 解压缩命令以及加密
前言
是新一代的压缩工具,全称是 7-Zip。相比较 zip 压缩工具 7z 具有更高的压缩比率。
7z官网对其的描述是:A file archiver with highest compression ratio。
压缩在实际中非常有用,比如我们想将不可描述的视频上传到度盘,再长的视频最终也会变成7秒视频。不过如果我们将视频文件压缩之后再上传......
言归正传,来看下 7z 的具体使用。
7z 命令格式如下:
7z <command> [<switches>...] <archive_name> [<file_names>...]
command 选项如下
a : 添加文件到压缩文档, 用于压缩文件使用
d : 将指定文件从压缩文档中删除
e : 解压文件, 但不创建文件夹
l : 列出压缩文件中的内容, 这个很有用, 在下面示例中会进行演示
t : 测试档案的完整性
u : 更新压缩文档中的某个文件
x : 解压文件
b : Benchmark
h : 计算文件的哈希值
i : 显示有关支持格式的信息
rn : 重命名文件压缩文档中某个文件名
<switches> 是可选参数,常用的有如下几个,具体可以使用 --help 命令查阅。
-p{Password} : 设置密码. 如果是在创建压缩文件时指定该参数表示设置压缩文件密码, 在解压时如果压缩文件设置了密码也需要使用该参数进行指定解压密码
-mhe : 启用头部加密(header encryption), 以便隐藏文件名(当使用 -p 参数时, 强烈建议使用该参数)
-o{Directory} : 设置在解压时将文件文件输出到指定目录
-t{Type} : 设置文件压缩格式, 默认为 7z. 另外也可以选择: zip, gzip, bzip2, lzip or tar
-v{size} : 分卷压缩大小, 单位可以是 B/K/M/G(不区分大小写). 示例 10k/10k/10m/10g
<archive_name> 设置指定的压缩归档名称。
<file_names> 要压缩的文件,支持批量。
文件压缩
命令格式:
7z a [-p{Password}] [-mhe] [-sdel] archive_name.7z file_name1 file_name2 ...
-p 指定加密密码,如果需要加密直接在 -p 后面写上密码即可,-p 和密码(Password)之间不要有空格。另外当你使用 -p 命令时,强烈建议你加上 -mhe 参数,用于隐藏头文件信息。
至于 -sdel,则是用于压缩完成后删除源文件。
我当前目录下有一个 file1.txt 文件,下面就以该文件进行测试。
创建压缩文件(含多级目录)
$ 7z a test.7z file1.txt
压缩完成之后,我们可以使用 l 参数列出压缩文件中的文件信息(仅仅是列出,并非真正的提取):
$ 7z l test.7z
...
Listing archive: test.7z
--
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 ....A 758817 755388 file1.txt
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 758817 755388 1 files
可以看到归档文件中已经有了一个 file1.txt 文件。
另外,创建压缩文件时除了指定多个文件还可以指定一个文件夹,即:
$ 7z a archiver_name.7z dir_path
示例:
$ 7z a testdir.7z ./sub_dir
如果文件夹还有子目录我们还可以使用递归参数 -r:
$ 7z a -r archiver_name.7z dir_path
向压缩文件中继续添加文件
上面已经创建了一个压缩文件 test.7z,参数 a 不仅可以用于创建,还可以用于向已存在的压缩文件中继续添加文件。现在就来向刚刚创建的压缩文件中继续添加文件:
$ 7z a test.7z file2.txt
再看下归档文件信息:
$ 7z l test.7z
...
Listing archive: test.7z
--
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 ....A 758817 755388 file1.txt
2021-07-19 22:17:44 ....A 758817 755388 file2.txt
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 1517634 1510776 2 files
重命名压缩文件中的文件名称
修改归档中的某个文件名可以使用 rn 参数,命令格式如下(支持多个):
7z a rn <archive_name> <src_file_1> <dest_file_1> [ <src_file_2> <dest_file_2> ... ]
上面我们向压缩文件 test.7z 添加了两个文件,现在我想将归档中的 file1.txt 文件名修改为 file11.txt:
$ 7z a rn test.7z file1.txt file11.txt
修改结果:
$ 7z l test.7z
...
Listing archive: test.7z
--
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 ....A 758817 755388 file11.txt
2021-07-19 22:17:44 ....A 758817 755388 file2.txt
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 1517634 1510776 2 files
删除压缩文件中的某个文件
命令格式:
7z d archive_name.7z file1 file2 ...
示例将归档中的 file2.txt 文件删除掉:
$ 7z d test.7z file2.txt
修改结果:
$ 7z l test.7z
...
Listing archive: test.7z
--
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 ....A 758817 755388 file1.txt
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 758817 755388 1 files
设置加密密码
文件都已经压缩存档了,那肯定都是些见不得人的东西,怎么能少了加密密码呢?
命令格式:
7z a -p${password} [-mhe] archiver_name.7z
-p 参数后面直接跟密码,不能有空格。
将之前的压缩文件删掉,我们重新创建一个压缩文件并设置一个加密密码:
$ 7z a -p001 test.7z file1.txt
我们使用 l 参数查看压缩文件内的文件名列表信息:
$ 7z l test.7z
...
Listing archive: test.7z
--
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 ....A 758817 755392 file1.txt
------------------- ----- ------------ ------------ ------------------------
2021-07-19 22:17:44 758817 755392 1 files
这里可以看到直接加密的问题。即使设置了加密密码,依然不影响我们使用 l 参数查看压缩文件内的文件名列表信息。为了隐私信息,强烈建议加上 -mhe 参数启用头部加密(header encryption),以便隐藏文件名:
$ 7z a -p001 -mhe test.7z file1.txt
现在如果再使用 l 命令查看文件信息,就必须输入密码才能看到文件信息:
$ 7z l test-mhe.7z
...
Listing archive: test-mhe.7z
Enter password (will not be echoed): <== 要求输入密码
使用 -p 设置加密压缩文件加密密码时,一定要加上 -mhe 参数。
文件解压
文件解压命令格式如下:
7z <x|e> [-p{Password}] archiver_name.7z [-o]
x 和 e 都是解压命令,7z 对这两个命令的解释如下:
e : Extract files from archive (without using directory names)
x : eXtract files with full paths
-p 指定加压密码(后面直接跟密码,不要使用空格)
-o 指定输出目录(后面直接跟目录,不要使用空格)
使用 x 解压参数
x 解压参数表示如果压缩文件中存在文件夹,就直接使用文件夹。
示例:
$ 7z x test.7z
使用 e 解压参数
e 和 x 虽然都是用于压缩文件解压,但区别是如果压缩文件中包含文件夹。 e 是直接提取文件夹中的内容,而不包含文件夹,所以 x 是推荐使用的加压方式。
示例:
$ 7z e test.7z
指定解压密码
解压与压缩相同,都使用 -p 指定加密密码即可,示例:
$ 7z x -p001 test.7z
注意: -p 参数后面直接跟密码,不能有空格。
解压到指定目录
大多时候需要将压缩文件中的内容解压到指定目录,想要解压到指定目录使用 -o 参数即可,示例:
$ 7z x -p001 test.7z -o./temp/
$ ls temp/
test.HEIC
注意: -o 参数后面直接跟路径,不能有空格。
分卷压缩与解压
分卷压缩可以将压缩后的文件分成多个部分(分卷),常用于处理大文件。分卷压缩会将一个大的压缩包分割成多个小的压缩文件(如 file.7z.001、file.7z.002 等)。
这些分卷可以单独存储、传输,最终需要解压时再组合为完整的文件。
压缩命令语法:
7z a -v{size} <输出文件名>.7z <源文件/文件夹>
-
-v{size}:指定分卷大小,单位可以是 B(字节)、K(千字节)、M(兆字节)、G(千兆字节) -
<输出文件名>.7z:压缩包的基础名称(不需要写.001,7z 会自动生成)
示例:
将文件 example.mp4 压缩为每卷 10MB 的分卷压缩包
7z a -v10m example.7z example.mp4
最终会在当前目录下生成多个分卷文件
example.7z.001
example.7z.002
...
解压缩命令:
7z x <分卷文件>.001
<分卷文件>.001:分卷压缩包的第一个文件(例如example.7z.001)
完结,撒花~